package org.hfy.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.hfy.dto.warehouse.InboundCreateDTO;
import org.hfy.dto.warehouse.InboundQueryDTO;
import org.hfy.dto.warehouse.OutsourcingInboundCreateDTO;
import org.hfy.entity.Inbound;
import org.hfy.entity.QuotationItem;

/**
 * 入库管理服务接口
 * 
 * @author hfy
 * @version 1.0
 */
public interface InboundService extends IService<Inbound> {

    /**
     * 分页查询可入库的订单列表
     * 
     * @param queryDTO 查询条件
     * @return 可入库的订单列表
     */
    IPage<QuotationItem> getAvailableOrdersPage(InboundQueryDTO queryDTO);

    /**
     * 分页查询入库记录
     * 
     * @param queryDTO 查询条件
     * @return 入库记录列表
     */
    IPage<Inbound> getInboundRecordsPage(InboundQueryDTO queryDTO);

    /**
     * 创建入库单
     * 
     * @param createDTO 入库创建DTO
     * @return 创建的入库单
     */
    Inbound createInbound(InboundCreateDTO createDTO);

    /**
     * 生成厂内编号
     * 
     * @return 厂内编号
     */
    String generateFactoryNo();

    /**
     * 根据报价明细ID获取已入库总数
     * 
     * @param quotationItemId 报价明细ID
     * @return 已入库总数
     */
    Integer getTotalInboundQuantityByQuotationItemId(Long quotationItemId);

    /**
     * 基于外发单创建入库单
     * 
     * @param createDTO 外发单入库创建DTO
     * @return 创建的入库单
     */
    Inbound createOutsourcingInbound(OutsourcingInboundCreateDTO createDTO);

    /**
     * 根据外发单ID获取已入库总数
     * 
     * @param outsourcingId 外发单ID
     * @return 已入库总数
     */
    Integer getTotalInboundQuantityByOutsourcingId(Long outsourcingId);
} 